#!/bin/bash

#gentoo上依赖:
	#app-misc/jq  生成和解析json

#set -x

# 保存当前脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

source "$SCRIPT_DIR/rfmAiGetPromptAndMultiModalFiles_qwen-image-edit.sh"
# qwen-image-edit 目前不支持多轮对话。 source shared_scripts/rfmAiJsonMessagesArray.sh
source "$SCRIPT_DIR/rfmAiProcessMultimodalFiles_qwen-image-edit.sh"


# 构建qwen-image-edit专用的请求格式
if [ -n "$MULTIMODAL_MESSAGES" ]; then
 # 使用多模态消息构建qwen-image-edit格式
 # 创建临时文件存储messages数组，参见rfmAiProcessMultimodalFiles_qwen-image-edit.sh 中关于jq命令使用--slurpfile和临时文件的注释
 temp_messages_file=$(mktemp)
 echo "[$MULTIMODAL_MESSAGES]" > "$temp_messages_file"
 
 # 使用文件输入构建请求JSON
 REQUEST_JSON=$(jq -n \
   --arg model "$rfm_AI_MODEL_NAME" \
   --slurpfile messages "$temp_messages_file" \
   '{
     model: $model,
     input: {
       messages: $messages[0]
     }
   }')
 
 # 清理临时文件
 rm -f "$temp_messages_file"
else
 # 如果没有多模态消息，但需要处理纯文本提示（虽然qwen-image-edit主要需要图片）
 if [ -n "$rfm_AI_MODEL_prompt" ]; then
   CONTENT_ARRAY=$(echo "[]" | jq --arg text "$rfm_AI_MODEL_prompt" '. += [{"text": $text}]')
   
   # 创建临时文件存储CONTENT_ARRAY
   temp_content_file=$(mktemp)
   echo "$CONTENT_ARRAY" > "$temp_content_file"
   
   # 使用文件输入创建消息对象
   SINGLE_MESSAGE=$(jq -n --slurpfile content "$temp_content_file" '{role: "user", content: $content[0]}')
   
   # 创建临时文件存储SINGLE_MESSAGE数组
   temp_single_msg_file=$(mktemp)
   echo "[$SINGLE_MESSAGE]" > "$temp_single_msg_file"
   
   REQUEST_JSON=$(jq -n \
     --arg model "$rfm_AI_MODEL_NAME" \
     --slurpfile messages "$temp_single_msg_file" \
     '{
       model: $model,
       input: {
         messages: $messages[0]
       }
     }')
   
   # 清理临时文件
   rm -f "$temp_content_file" "$temp_single_msg_file"
 else
   echo "错误：qwen-image-edit需要至少一张图片" >&2
   exit 1
 fi
fi

echo $REQUEST_JSON > .rfmAI_latest_request.json

# The JSON payload includes the model name and the user's prompt
RESPONSE=$(echo $REQUEST_JSON | curl -sS --fail-with-body -X POST "$rfm_AI_MODEL_HOST_URL" \
  -H "Authorization: Bearer $rfm_AI_MODEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d @- 2>&1) # Capture stderr as well

# Check if curl failed (using --fail-with-body helps capture HTTP errors)
CURL_EXIT_CODE=$?
if [ $CURL_EXIT_CODE -ne 0 ]; then
  echo "Raw REQUEST_JSON for debug : $REQUEST_JSON" >&2
  echo "Raw RESPONSE for debug : $RESPONSE" >&2
  exit 4
fi

# 解析qwen-image-edit的响应格式
RESULT=$(echo "$RESPONSE" | jq -r '
if .error then
 "Error: " + (.error.message // .error | tostring)
elif .output then
 if .output.choices then
 (.output.choices[0].message.content // []) | 
 if type == "array" then
 map(select(.text)) | first | .text // "图片生成完成，请查看保存的文件"
 else
 "图片生成完成，请查看保存的文件"
 end
 elif .output.result then
 .output.result
 else
 "图片生成完成，请查看保存的文件"
 end
else
 .message // ("Error: Unexpected API response format: " + (tostring))
end')

RESPONSE_ID=$(echo "$RESPONSE" | jq '.id // empty')

# 提取图片URL用于附件下载
ATTACHMENT_URL=""
if echo "$RESPONSE" | jq -e '.output.choices[0].message.content[] | select(.image != null)' > /dev/null 2>&1; then
    ATTACHMENT_URL=$(echo "$RESPONSE" | jq -r '.output.choices[0].message.content[] | select(.image != null) | .image' | head -1)
fi

# 如果没有找到图片URL，检查其他可能的格式
if [ -z "$ATTACHMENT_URL" ] || [ "$ATTACHMENT_URL" = "null" ]; then
    ATTACHMENT_URL=$(echo "$RESPONSE" | jq -r '.output.images[0] // empty')
fi

# 在显示前先保存到临时目录（包括下载附件）
source "$SCRIPT_DIR/rfmAiSaveToTemp.sh" "$ATTACHMENT_URL"

# 现在可以显示结果了（附件已经下载到临时目录）
source "$SCRIPT_DIR/rfmAiDisplayResult_WithDirectory.sh"

# pushd $(pwd) 1>/dev/null
# 这里当前目录实际上是rfm AI_model addon 的目录，而不是$rfm_curPath的目录。下面保存对话记录时，会进入$rfm_curPath目录，所以这里pushd 后面在popd,以免 rfm AI model 脚本找不到.
# 之前source shared_scripts/xxxx.sh 都是用的相对路径，现在都加上 $(dirname "${BASH_SOURCE[0]}") ，使用完整路径，理论上pushd和popd是可以不用了的

# 询问用户是否要保存到指定目录
read -p "是否保存对话记录到指定目录? [Y/n] " save_to_dir
save_to_dir=${save_to_dir:-Y}
if [[ "$save_to_dir" =~ ^[Yy]$ ]]; then
   # 如果已经保存到最终目录,关闭原打开temp目录的rfm窗口，打开FINAL目录
   if [ -n "$rfm_PID_DisplayingResult" ]; then kill -s SIGTERM $rfm_PID_DisplayingResult; fi
   source "$SCRIPT_DIR/rfmAiSaveFromTemp.sh"
   source "$SCRIPT_DIR/rfmAiDisplayResult_WithDirectory.sh" "$RFM_FINAL_SAVE_PATH/rfmAI.md"
fi

# popd 1>/dev/null
